/**
 * WQuake 官方插件模板 —— 入口文件
 * ==================================================================
 * 插件在沙箱 iframe 中运行，通过宿主注入的全局对象 `wq` 与 WQuake 交互。
 * 你只需导出（或定义）一个 onLoad(wq) 函数作为入口。
 *
 * 可用能力（受 manifest.permissions 授权限制）：
 *   wq.app                      -> { version, apiVersion }
 *   wq.plugin                   -> { id, version }
 *   wq.events.on(type, cb)      -> 订阅 'eew' | 'earthquake' | 'tsunami'，返回取消函数
 *   wq.ui.toast(msg, type)      -> 弹提示  type: 'info'|'success'|'error'|'warning'
 *   wq.sound.play(path)         -> 播放插件目录内音频（相对路径）或 http/data URL
 *   wq.storage.get(k)/set(k,v)  -> 插件私有持久化存储（Promise）
 *   wq.settings.getAll()/get(k) -> 读取本插件设置（对应 settings.schema.json）
 *   wq.settings.onChange(cb)    -> 设置变更回调
 *   wq.log.info/warn/error(...) -> 输出到宿主控制台
 *   wq.onUnload(cb)             -> 注册卸载清理回调（插件被禁用时触发）
 * ==================================================================
 */
function onLoad(wq) {
  wq.log.info('模板插件已加载', wq.app.version)

  // 记录累计收到的预警次数（演示 storage）
  let count = 0
  wq.storage.get('eewCount').then((v) => { count = v || 0 })

  // 订阅地震预警事件
  const off = wq.events.on('eew', (eew) => {
    const s = wq.settings.getAll()
    const mag = Number(eew && (eew.magnitude ?? eew.mag) || 0)

    // 低于阈值则忽略
    if (mag < Number(s.minMag ?? 0)) return

    count++
    wq.storage.set('eewCount', count)

    if (s.showToast !== false) {
      wq.ui.toast('收到预警 M' + mag.toFixed(1) + '（累计 ' + count + ' 次）', 'warning')
    }
    if (s.playSound) {
      wq.sound.play('assets/ding.mp3') // 放一个音频到 assets/ 即可启用
    }
    wq.log.info('EEW', eew)
  })

  // 设置变更时给个反馈
  const offSettings = wq.settings.onChange((values) => {
    wq.log.info('设置已更新', values)
  })

  // 插件禁用时清理（宿主也会自动解绑，但好习惯是自己也清理）
  wq.onUnload(() => {
    off()
    offSettings()
    wq.log.info('模板插件已卸载')
  })
}

// 兼容两种写法：ESM 风格 export 或直接定义全局 onLoad
if (typeof window !== 'undefined') window.onLoad = onLoad
